import json

from application.models.users.user import *
from flask import jsonify, request
from flask import Blueprint, redirect
from application.tools.myredis import r
course_blue = Blueprint("courseblue", __name__)

#获取课程详情
@course_blue.route('/getDetail')
def getDetail():
    #获取id
    cid = request.args.get('cid')
    userid =request.args.get('userid')
    #查询课程信息
    course =Course.query.filter(Course.id==cid).first()
    #加入浏览记录,获取userid
    if userid:
        key = 'collection'+str(userid)+'pro'+str(cid)
        r.hash_add(key,'id',course.id)
        r.hash_add(key,'name',course.name)
    #返回课程信息
    course ={'id':course.id,'name':course.name}
    return jsonify({'code':200,'course':course})

#获取最近浏览
@course_blue.route('/getViews')
def getViews():
    #获取id
    userid = request.args.get('userid')
    findkey = 'collection'+str(userid)+'*'
    gidlist = r.getvalues(findkey)
    reslist=[]
    for i in gidlist:
        goods = r.getall_hash(i)
        dict ={}
        for k,v in goods.items():
            kk = k.decode()
            vv = v.decode()
            dict [kk] =vv
        reslist.append(dict)
    return jsonify({'code':200,'list':reslist})

#加入购物车
@course_blue.route('/buy')
def buy():
    #获取参数 userid courseid
    userid = request.args.get('userid')
    courseid = request.args.get('courseid')
    #加减类型默认为+
    type = 1
    try:
        type = request.args.get('type')
    except:
        pass
    #从hash中获取数据,如果存在数量+1 buy1course2
    key = 'buy'+str(userid)+'course'+str(courseid)
    #如果不存在存入redis hash
    flag = r.findkey_hash(key)
    print(flag)
    #存在
    if flag:
        #数量+1
        ff = r.jiajian_hash(key,"number",1,type)
        if ff == False:
            return jsonify({'code':10010,'mes':'不能再减了'})
    else:
        r.hash_add(key,'id',courseid)
        r.hash_add(key,'number',1)
        #选中
        r.hash_add(key,'flag',"True")
    return jsonify({'code':200})
    #返回结果


#获取购物车
@course_blue.route('/mycart')
def mycart():
    #获取参数userid
    userid = request.args.get('userid')
    #从hash中获取商品id和数量
    key = "buy"+str(userid)+"*"
    goods = r.getvalues(key)
    glist=[]
    tmoney=0
    tcount=0
    if goods:
        for i in goods:
            #获取每一条商品的具体信息
            good = r.getall_hash(i)
            rescourse = {}
            for k,v in good.items():
                params = k.decode()
                value = v.decode()
                if params == 'id':
                    #获取到的商品信息
                    tcourse = Tcourse.query.filter(Tcourse.id==value).first()
                    rescourse['id'] = tcourse.id
                    rescourse['name'] = tcourse.title
                    rescourse['url'] = tcourse.url
                    rescourse['price'] = float(tcourse.price)
                if params == 'number':
                    #获取购买的数量
                    rescourse['number'] = value
                if params == 'flag':
                    if value == 'True':
                        rescourse['flag']=True
                    else:
                        rescourse['flag']=False
            rescourse['total'] = float(rescourse['price'])*float(rescourse['number'])
            #     #计算总价格
            tmoney = float(tmoney)+float(rescourse['total'])
            tcount = int(tcount) +int(rescourse['number'])
            glist.append(rescourse)
    #价格、图片、名字....从mysql中获取,从redis商品缓存中读取
    #数据重组返回
    return jsonify({'code':200,'glist':glist,'tmoney':tmoney,'tcount':tcount})

#获取训练营
@course_blue.route('/bootcamp',methods=['GET'])
def bootcamp():
    data=Tcourse.query.all()
    #序列话
    clist = [{
        'id':i.id,
        "url":i.url,
        'price':i.price,
        'store':i.store,
        'intro':i.intro,
    }for i in data]
    return jsonify({'code':200,'clist':clist})

#修改单个得选中状态
@course_blue.route('/modifyStatus')
def mmodifyStatus():
    # 如果true改为falsk ,如果false改为true
    #获取参数 userid goodsid
    userid = request.args.get('userid')
    cid = request.args.get('cid')
    #获取原来得状态判断
    key ="buy"+str(userid)+'course'+str(cid)
    flag =r.getone_hash(key,'flag')
    #设置默认为选中
    cflag = "True"
    if flag:
        flag = flag.decode()
        #根据返回结果选择相反的值
        if flag == "True":
            cflag= "False"
        r.hash_add(key,'flag',cflag)
        return jsonify({'code':200})

@course_blue.route('/modifyAliStatus')
def modifyAliStatus():
    userid = request.args.get('userid')
    status = request.args.get('status')
    flag ='false'
    if status == 'true':
        flag = 'True'
    #把当前用户购物车全部改为选择或者没选中
    keys = r.getvalues('buy'+str(userid)+'*')
    for i in keys:
        r.hash_add(i,'flag',flag)
    return jsonify({'code':200})

import json,time
@course_blue.route('/creata_orders',methods=['POST'])
def creata_orders():
    # 接收参数userid
    data = json.loads(request.data)
    userid = int(data['userid'])
    #根据userid查询购物车
    key = 'buy'+str(data['userid'])+'*'
    glist = r.getvalues(key)
    #生成订单号
    order_no = str(int(time.time()))+str(data['userid'])
    totalmoney =0

    if glist:
        #写入订单详情表
        for i in glist:
            flag = r.getone_hash(i,'flag')
            if flag:
                flag = flag.decode()
                if flag == 'True':
                    id = r.getone_hash(i,'id')
                    id = id.decode()
                    number = r.getone_hash(i,'number')
                    number = number.decode()
                #判断购物车中已经选中的记录
                    tcourse = Tcourse.query.filter(Tcourse.id == id).first()
                    #查询训练营课程表,判断库存
                    if tcourse.store<number:
                        return jsonify({'code':10010,'mes':"库存不足"})
                    #写入订单详情表
                    tmoney = float(tcourse.price) * float(number)
                    detail = OrdersDetail(order_no=order_no,courseid=id,number=number,price=tcourse.price,tmoney=tmoney)
                    db.session.add(detail)
                    #总价
                    totalmoney = totalmoney + tmoney
                    #删除购物车已经选中的记录
                    r.del_str(i)
        #写入订单
        orders = Orders(order_no=order_no,userid=userid,tmoney=totalmoney)
        db.session.add(orders)
        db.session.commit()
        return jsonify({'code':200})
